package com.payment.common.utils.number;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

import org.apache.commons.codec.binary.Base64;
import org.springside.modules.utils.mapper.JsonMapper;

import com.payment.common.dto.notify.GeeboonoParamDto;
import com.payment.common.dto.notify.NotifyDto;
import com.payment.common.dto.notify.NotifyRecordDto;
import com.payment.common.dto.notify.NotifyRecordDto.Builder;
import com.payment.common.dto.notify.SmsParamDto;



/**
 * 类名：NotifyUtil.java<br>
 * 描述：<br>
 * 创建者：XINJF<br>
 * 创建日期：2018年4月25日 上午11:23:30<br>
 * 版本：1.0<br>
 * 修改者：<br>
 * 修改日期：<br>
 */
public class NotifyUtil {
	
	private static final String NOTIFY_RECEIVE_URL = "http://localhost:8082"; //可以从配置文件里获取
	
	/**
	 * 功能描述：发送短信消息异步通知<br>
	 * 创建者：XINJF<br>
	 * 创建日期：2018年4月25日 下午12:02:59<br>
	 * 版本：1.0<br>
	 * 修改者：<br>
	 * 修改日期：<br>
	 */
	public static String formatSms(SmsParamDto smsParamDto,String phone,String content){
		return coverNotifyRecord(smsParamDto,phone,content);
	}
	
	/**
	 * 功能描述：发送简帛号通知异步处理数据<br>
	 * 创建者：XINJF<br>
	 * 创建日期：2018年4月25日 下午2:53:37<br>
	 * 版本：1.0<br>
	 * 修改者：<br>
	 * 修改日期：<br>
	 */
	public static String formatGeeboono(final GeeboonoParamDto geeboonoParamDto){
		return coverNotifyRecord(geeboonoParamDto,null,null);
	}
	
	/**
	 * 功能描述：转换消息队列存储数据<br>
	 * 创建者：XINJF<br>
	 * 创建日期：2018年4月25日 下午3:04:35<br>
	 * 版本：1.0<br>
	 * 修改者：<br>
	 * 修改日期：<br>
	 */
	private static String coverNotifyRecord(NotifyDto notifyDto,String merchantNo,String merchantOrderNo){
		String msg = covertMsgToJson(notifyDto);
		Builder builder = new NotifyRecordDto
				              .Builder(notifyDto.getNotifyType(),msg,merchantNo,merchantOrderNo);
		msg = convertMsgToBase64(msg);
		System.out.println("convertMsg=="+msg);
		builder.url(NOTIFY_RECEIVE_URL + "/api/notifyReceive?msg="+msg + "&notifyType="+notifyDto.getNotifyType());
		NotifyRecordDto notifyRecordDto = builder.build(); //改掉传统的多个set
		return JsonMapper.INSTANCE.toJson(notifyRecordDto);
	}
	
	/**
	 * 功能描述：转换成JSON<br>
	 * 创建者：XINJF<br>
	 * 创建日期：2018年4月25日 下午2:51:15<br>
	 * 版本：1.0<br>
	 * 修改者：<br>
	 * 修改日期：<br>
	 */
	private static String covertMsgToJson(NotifyDto notifyDto){
		final String msg = JsonMapper.INSTANCE.toJson(notifyDto);
		return msg;
	}
	
	/**
	 * 功能描述：将需要在接收端获取到的数据进行BASE64位加密<br>
	 * 创建者：XINJF<br>
	 * 创建日期：2018年4月25日 下午2:51:52<br>
	 * 版本：1.0<br>
	 * 修改者：<br>
	 * 修改日期：<br>
	 */
	private static String convertMsgToBase64(String msg){
		String message = null;
		try {
			message = URLEncoder.encode(Base64.encodeBase64String(msg.getBytes("UTF-8")), "UTF-8");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return message;
	}
	
	public static void main(String[] args) {
		SmsParamDto smsParamDto = new SmsParamDto();
		smsParamDto.setNotifyType(1);
		smsParamDto.setPhone("13720895280");
		smsParamDto.setContent("test");
		
		String msg = NotifyUtil.formatSms(smsParamDto,"13720895280","test");
		System.out.println("msg=="+msg);
	}

}
